// MMORPG游戏初始化管理器
import { GAME_STATES } from './types';
import type { GameData, GameStateSnapshot, GameState } from './types';

/**
 * 游戏初始化管理器类，负责游戏数据的初始化和管理
 */
export class GameInitializer {
  // 当前游戏数据
  private gameData: { playerData?: any; worldData?: any } = {};

  /**
   * 初始化游戏数据
   * @param data 可选的游戏初始数据
   * @returns 初始化后的当前游戏状态
   */
  public initializeGameData(data?: GameData): GameState {
    // 初始化玩家数据
    if (data?.playerData) {
      this.gameData.playerData = { ...data.playerData };
      console.log('初始化玩家数据:', this.gameData.playerData);
    }
    
    // 初始化世界数据
    if (data?.worldData) {
      this.gameData.worldData = { ...data.worldData };
      console.log('初始化世界数据:', this.gameData.worldData);
    }
    
    // 返回初始状态
    return data?.initialState && Object.values(GAME_STATES).includes(data.initialState) 
      ? data.initialState 
      : GAME_STATES.EXPLORATION;
  }

  /**
   * 获取游戏状态快照
   * @param currentState 当前游戏状态
   * @param possibleTransitions 可能的状态转换
   * @returns 游戏状态快照对象
   */
  public getGameStateSnapshot(currentState: GameState, possibleTransitions: GameState[]): GameStateSnapshot {
    return {
      currentState: currentState,
      availableStates: Object.values(GAME_STATES),
      possibleTransitions: possibleTransitions
    };
  }

  /**
   * 获取玩家数据
   * @returns 当前玩家数据
   */
  public getPlayerData(): any {
    return this.gameData.playerData;
  }

  /**
   * 更新玩家数据
   * @param newData 新的玩家数据
   */
  public updatePlayerData(newData: any): void {
    this.gameData.playerData = { ...this.gameData.playerData, ...newData };
  }

  /**
   * 获取世界数据
   * @returns 当前世界数据
   */
  public getWorldData(): any {
    return this.gameData.worldData;
  }

  /**
   * 更新世界数据
   * @param newData 新的世界数据
   */
  public updateWorldData(newData: any): void {
    this.gameData.worldData = { ...this.gameData.worldData, ...newData };
  }

  /**
   * 重置游戏数据
   */
  public resetGameData(): void {
    this.gameData = {};
    console.log('游戏数据已重置');
  }
}